Mybatis |
您所在的位置:网站首页 › mybatis 更新字段为空 › Mybatis |
问题:
最近一次在写个需求的时候,需要更新数据库字段,使用了Mybatis-Plus中的updateById方法,发现当前端传过来是Null值的时候,出现updateByID方法无法将字段值更新为null的问题,经验证,updateBatchById方法同样无法更新null值。
在控制台打印sql语句时,发现mybatis-plus对为null的字段进行了过滤。 查阅资料后发现,3.1.2版本后,field-strategy被弃用,db-config配置项field-strategy=ignore失效,在使用updateByID方法时,mybatis-plus采用默认策略,忽略对null的校验,即""会更新,null不会更新,导致无法更新null。 解决方法 在需要字段上加上@TableField(strategy = FieldStrategy.IGNORED)注解,就会忽略为空的判断,将该字段设置为null也会更新表中的数据
拓展 新版本采用如下三个注解来进行配置 insertStrategy类型: com.baomidou.mybatisplus.annotation.FieldStrategy默认值: NOT_NULL updateStrategy类型: com.baomidou.mybatisplus.annotation.FieldStrategy默认值: NOT_NULL selectStrategy类型: com.baomidou.mybatisplus.annotation.FieldStrategy默认值: NOT_NULL
意义如下: IGNORED,忽忽略非空判断,null和""都不过滤 DEFAULT, 默认 NOT_EMPTY, 非空判断,为null,为空串的忽略,就是如果设置值为null,"",不会更新数据库 NOT_NULL, 非NULL判断,忽略null的字段,不忽略""
为了更新null,有如下几种方式: a、全局配置,所用更新都不过滤null和"" 1 db-config: 2 update-strategy: ignored
b、单字段配置,对该字段更新时不过滤null和"" 1 TableField(updateStrategy = FieldStrategy.IGNORED) 2 private String imgUrl;c、自定义 1 this.lambdaUpdate() 2 .eq(User::getId, User.getId()) 3 .set(User::getName, stageInfo.getName()) 4 .update();
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |